約 3,602,901 件
https://w.atwiki.jp/keroro00innovator/pages/6100.html
Stormy Stormy アーティスト Nissy×SKY-HI 発売日 2024年4月17日 レーベル SMM itaku DLデイリー最高順位 1位(2024年4月18日) 週間最高順位 1位(2024年4月23日) 月間最高順位 5位(2024年4月) 初動総合売上 21332 累計総合売上 41113 週間1位 収録内容 曲名 タイアップ 視聴 1 Stormy ブルーロック 主題歌 CD/総合ランキング 週 月日 CDシングル 総合シングル 順位 週/月間枚数 累計枚数 順位 週/月間枚数 累計枚数 1 4/23 1 10834 10834 1 21332 21332 2 4/30 16 1053 11887 8 9955 31287 2024年4月 3 11887 11887 5 31287 31287 3 5/7 10 737 12624 5 4976 36263 4 5/14 427 13051 18 2423 38686 5 5/21 283 13334 30 1559 40245 6 5/28 178 13512 653 40898 7 6/4 117 13629 117 41015 2024年5月 38 1742 13629 23 9728 41015 8 6/11 98 13727 98 41113 配信ランキング Stormy 週 月日 デジタルシングル 順位 週/月間DL数 累計DL数 1 4/23 4 5620 5620 2 4/30 7 2144 7764 2024年4月 9 7764 7764 3 5/7 17 1632 9396
https://w.atwiki.jp/moeapp/pages/14.html
キーワードを元に自動取得された情報を表示してるだけ 【iPhone 萌えアプリ】に関する口コミ一覧 #bf 【iPhone 恋愛 移植】に関する口コミ一覧 #bf 【iPhone 萌えアプリ】に関するGoogleニュース一覧 ドラゴンクエストけしケシ!のレビューと序盤攻略 - アプリゲット NBA RISE TO STARDOM(NBAライズ)のレビューと序盤攻略 - アプリゲット FFVII The First Soldierのレビューと序盤攻略 - アプリゲット グランサガ(Gran Saga)のレビューと序盤攻略 - アプリゲット セブンナイツ2(Seven Knights 2)のレビューと序盤攻略 - アプリゲット 『鬼滅の刃』大ヒットの背景には、既存のアニメ業界の常識を覆す「視聴の最大化」という流通戦略があった! 1兆円規模の「鬼滅経済圏」が成立した要因を、データから分析する(電ファミニコゲーマー) - Yahoo - Yahoo!ニュース 映画すみっコぐらし~まほうをつかってすみっコぽちぽち~のレビューと序盤攻略 - アプリゲット リネージュW(Lineage W)のレビューと序盤攻略 - アプリゲット テイルズ オブ ルミナリアのレビューと序盤攻略 - アプリゲット ラグナドール 妖しき皇帝と終焉の夜叉姫のレビューと序盤攻略 - アプリゲット ピクミン ブルーム(Pikmin Bloom)のレビューと序盤攻略 - アプリゲット 【ギアジェネ日記#4】ルルーシュが異なる世界の主人公たちと出会う!“ナナリー・オブ・ハロウィン”開幕! | スマホゲーム情報ならファミ通App - ファミ通App アヴァベル クラシックのレビューと序盤攻略 - アプリゲット 転生したらスライムだった件 魔王と竜の建国譚 まおりゅうのレビューと序盤攻略 - アプリゲット れじぇくろ! ~レジェンド・クローバー~のレビューと序盤攻略 - アプリゲット ゲートオブナイトメアのレビューと序盤攻略 - アプリゲット マナシスリフレインのレビューと序盤攻略 - アプリゲット 猫とスープ(Cats&Soup)のレビューと序盤攻略 - アプリゲット ダークファイヤーヒーローズのレビューと序盤攻略 - アプリゲット たかやまくえすとのレビューと序盤攻略 - アプリゲット フリーファイア マックス(Garena Free Fire MAX)のレビューと序盤攻略 - アプリゲット 脱出ゲーム Tiny Room Collectionのレビューと序盤攻略 - アプリゲット iPad mini 第6世代のミニチュア感にガジェット萌え 実機先行レビュー - Engadget日本版 デビラビローグのレビューと序盤攻略 - アプリゲット とうふファンタジー5のレビューと序盤攻略 - アプリゲット WARPATH-武装都市-のレビューと序盤攻略 - アプリゲット Dragonicle:ドラゴンガーディアンのレビューと序盤攻略 - アプリゲット コトワザクエストのレビューと序盤攻略 - アプリゲット Zen Pinball Partyのレビューと序盤攻略 - アプリゲット 勇者の農園サバイバルのレビューと序盤攻略 - アプリゲット Metal Slug Commanderのレビューと序盤攻略 - アプリゲット 「萌えCanちぇんじ!」,11周年記念キャンペーンを開催 - 4Gamer.net フリック回転寿司のレビューと序盤攻略 - アプリゲット マージモンスターエボリューションのレビューと序盤攻略 - アプリゲット イース6 オンラインのレビューと序盤攻略 - アプリゲット けもフレバトルのレビューと序盤攻略 - アプリゲット Re:ゼロから始める異世界生活 禁書と謎の精霊のレビューと序盤攻略 - アプリゲット カウンターサイド(COUNTER:SIDE)配信日と事前登録の情報【11/29更新】配信予定日を12月16日と発表! - アプリゲット 新作・事前登録中のiPhone/Android向け最新おすすめスマホゲームアプリまとめ 2021年7月3日号|ゲーム情報サイト Gamer - Gamer 【決定版】ガチで怖い!スマホで遊べるホラーゲームアプリおすすめ7選 - アプリゲット 【配信開始】神となるか悪魔となるか?選択次第で世界が変わる!人気MMORPGが10年の時を経てスマホで復活『フォーセイクンワールド:神魔転生』 | スマホゲーム情報ならファミ通App - ファミ通App なつものがたりのレビューと序盤攻略 - アプリゲット かのかり初のゲームアプリ「彼女、お借りします ヒロインオールスターズ」が9月にリリース。現在9作品20人のヒロインたちがフルボイスで登場予定 - 4Gamer.net ゴジラ バトルラインのレビューと序盤攻略 - アプリゲット ガールズコントラクトのレビューと序盤攻略 - アプリゲット にょろっこのレビューと序盤攻略 - アプリゲット 新米裁判官 拓馬のリーガル・ジャーナルのレビューと序盤攻略 - アプリゲット にゃんこリゾートのレビューと序盤攻略 - アプリゲット 月光彫刻師のレビューと序盤攻略 - アプリゲット Bounce and collectのレビューと序盤攻略 - アプリゲット ブラック・サージナイトのレビューと序盤攻略 - アプリゲット 僕のヒーローアカデミア ULTRA IMPACTのレビューと序盤攻略 - アプリゲット ラスト・ラグナレクのレビューと序盤攻略 - アプリゲット ファミリーファームの冒険のレビューと序盤攻略 - アプリゲット iOS14.5で441種類の絵文字が追加〜様々な肌の色、性別の組み合わせをサポート - iPhone Mania リネージュ2Mのレビューと序盤攻略 - アプリゲット アプリ『ウマ娘』で感じた、プレーヤーに伝染する作り手の愛情 - Engadget 日本版 『ポケモンGO』不器用を克服!! “手”で広がるワンランク上のARブレンディング | スマホゲーム情報ならファミ通App - ファミ通App Inkedのレビューと序盤攻略 - アプリゲット アプリ「ウマ娘」プレイレポ。アニメ未見・競馬も知らない僕でも5時間ぶっ通しでハマった - Engadget日本版 Royal Crown(ロイヤルクラウン)のレビューと序盤攻略 - アプリゲット Crabhouseのレビューと序盤攻略 - アプリゲット ブルーアーカイブのレビューと序盤攻略 - アプリゲット 魔王の時間のレビューと序盤攻略 - アプリゲット たたかえ!マッチングアプリのレビューと序盤攻略 - アプリゲット After War - Idle Robot RPGのレビューと序盤攻略 - アプリゲット イリュージョンコネクトのレビューと序盤攻略 - アプリゲット 五等分の花嫁 五つ子ちゃんはパズルを五等分できない。のレビューと序盤攻略 - アプリゲット 激かわMMORPG『ルミア サガ-ちび萌え自由大冒険』8/28配信決定!長縄まりあさんのサイン色紙プレゼントキャンペーン実施 | スマホゲーム情報ならファミ通App - ファミ通App 「萌え戦」,“すぺしゃる ログインボーナス”が12月23日スタート - 4Gamer.net 「萌え戦」萌え萌え大戦争のミーリ&レヴィーレが登場 - 4Gamer 懐かしのあのアプリも登場? 過去10年間のiOS人気アプリを振り返る!【App Annie調査】 - MarkeZine 放置ゲームおすすめ無料アプリランキングTOP25 - アプリゲット パズルゲームおすすめ無料アプリランキングTOP25 - アプリゲット RPG(ロールプレイングゲーム)おすすめ無料アプリランキング TOP25 - アプリゲット アクションゲームおすすめ無料アプリランキングTOP25 - アプリゲット 200万人が萌えた。美少女アンドロイド育成ゲームがいよいよ7周年 - AppBank BIGLOBEがiPhone/iPad向けアプリ「萌えぷちチャット」の提供を開始~声優:西明日香による 撮りおろしボイスを収録した会話アプリ~ - @Press “あまちのちゃん”って誰? 謎の美少女をフィーチャーしたミニゲームアプリが登場 | スマホゲーム情報ならファミ通App - ファミ通.com 実用度5つ星の萌え系アプリとは? - 日刊SPA! 【人気記事ランキング】萌え美少女と混浴できるAndroidアプリ『一緒にお風呂物語 萌え湯』に注目 | スマホゲーム情報ならファミ通App - ファミ通.com iPhone/iPadアプリ「萌えっ子ばすなび」をリリース ~「萌えっ子フリーきっぷ」の萌えキャラと一緒に北海道旅行に行こう!~ - @Press 【iPhoneおすすめアプリ】萌えと達成感をさくっと楽しむ!『萌え育成少女』 - ファミ通.com 発禁になったAndroid、iPhoneアプリが再販! “リジェクトアプリマーケット”がオープン - ファミ通.com iPhone向け萌え系美少女ゲームアプリ『Ah..Moemory 3 ~女子高生の放課後~』リリース! - PR TIMES (プレスリリース)
https://w.atwiki.jp/vsync/pages/21.html
Google App Engine とは? Google App Engine を使用すると、Google のインフラ上で自作の Web アプリケーションを実行できる。 トラフィックやデータ ストレージの増大に合わせて容易なスケーリングが可能。 作成したアプリケーションは、Google Apps を使用して任意のドメイン(たとえばhttp //www.example.com/)から提供できる。 Google App Engine では、さまざまなプログラミング言語で記述したアプリケーションがサポートされるjava Python等。 App Engine は無料で始めることができます。最大 500 MB の永続性ストレージに加え、月間約 500 万ページ ビューに対応できる十分な CPU と帯域幅をもつ。 Javaで作るGoogle App Engineの解説本↓ すっきりわかるGoogle App Engine for Javaクラウドプログラミング Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ) PythonとJavaにも対応のGoogle App Engineの解説本↓ 新人プログラマのためのGoogle App Engineクラウド・アプリケーション開発講座―JAVA PYTHON対応
https://w.atwiki.jp/mixmasterau/pages/39.html
Fork Load(砂漠の分岐路)の(X 115 Y 127)から入場可能です。 このダンジョンは入場制限がありません。プレミアムチケットが不要です。 同じ種族のコアが多く沸くため序盤のレベル上げに最適です。 全てアクティブモンスターなので変身鎧等があると快適です。 Metal Room コア名 レベル 攻撃範囲 CrimsonMetal 90 ~ 115 近 GreenTravel 94 ~ 119 遠 WhiteWags 104 ~ 129 遠 Wagstuff 89 ~ 114 近 EvilClaw 100 ~ 125 遠 BomberGun 98 ~ 123 遠
https://w.atwiki.jp/dawnofwar/pages/45.html
Stormboyz Squad(Ork、歩兵ユニット) Stormboyz Squad。一体どうやって背中のRokkitを操作しているのだろうか… 区別が付きにくいが、真中にいるヘルメットをかぶっていないユニットがStormboy Nob Leader。 Stats Stormboyz Squad 生産コスト 160 0 4 生産時間 23秒(実際には18.4秒) 生産場所 Da Boyz Hut 生産に必要な条件 30 Ork Pop以上 生産限界数 なし 体力 275/1 分隊の人数 4/15 モラル 400/7/150 アーマー Infantry Heavy Medium ユニットサイズ 12 移動速度 24 視界範囲 25(ステルス看破不可) 増員コスト 35 0 1 増員時間 10秒 射撃用武器 Slugga 接近用武器 Choppa Squad Leader Stormboy Nob Leader 生産コスト 75 20 2 生産時間 30秒 生産に必要な条件 Pile O Gunz!、31 Ork Pop以上 生産限界数 1分隊に1人まで ボーナス モラル最大値+150、モラル回復速度+2 Stormboy Nob Leaderはジャンプ能力と移動速度を除けば普通のNob Leaderと同じ能力を持っている。 アビリティ Jump 種別 発動型 対象 自分 条件 なし 再使用まで 45秒(一回分) 範囲 70 効果 指定した地点まで空中を飛行して移動する。一度のジャンプでゲージの半分を消費する。ゲージがフルにたまっていれば連続で二回飛ぶことができる。 Stikk Bombz 種別 発動型 対象 敵の歩兵・コマンダー・Daemon 条件 Pile O Gunz! 再使用まで 75秒 範囲 20 効果 指定した敵にStikk Bombを投げつけ、80程度のダメージを与えて転倒させる(攻撃範囲4)。 Turbo Boost 種別 発動・持続型 対象 自分 条件 Stoomboy Speed Boost Research研究済み 再使用まで 45秒 効果 10秒の間、移動速度が1.5倍になる。 Mobボーナス 種別 受動型 対象 自分および周囲の分隊 条件 Mobボーナスとは参照 効果 Mobボーナスの内、「士気回復速度上昇」「攻撃力上昇」「士気耐性獲得」が適用される。 Turbo Boostで加速するStormboyz Squad。 へヴィウェポン なし 適用される研究 Stormboy Speed Boost Research 研究コスト 25 35 研究時間 40秒 研究場所 Pile O Gunz! 研究に必要な条件 31 Ork Pop以上 効果 移動速度が30%上昇する。アビリティTurbo Boostが使用可能になる。 他のユニットへの効果 なし More Choppy 研究コスト 100 50 研究時間 30秒 研究場所 Pile O Gunz! 研究に必要な条件 40 Ork Pop以上 効果 Choppa(近接用標準装備)の攻撃力が35%向上 他のユニットへの効果 Slugga Boy、Shoota Boy、Nobの近接攻撃力が35%向上Nob LeaderとStormboy Nob Leaderの近接用武器がPower Clawにアップグレードされる Even More Choppy 研究コスト 150 100 研究時間 30秒 研究場所 Pile O Gunz! 研究に必要な条件 65 Ork Pop以上、Orky Fort建造済み、More Choppy研究済み 効果 Choppa(近接用標準装備)の攻撃力がさらに35%向上 他のユニットへの効果 Slugga Boyの近接攻撃力が10%向上Shoota Boy、Nobの近接攻撃力が35%向上 'Eavy Boy Armour 研究コスト 75 25 研究時間 45秒 研究場所 Pile O Gunz! 研究に必要な条件 30 Ork Pop以上 効果 体力が33%向上 他のユニットへの効果 Slugga Boy、Shoota Boy、Tankbustaz、Nobの体力が33%向上 Super 'Eavy Boy Armour 研究コスト 75 25 研究時間 45秒 研究場所 Pile O Gunz! 研究に必要な条件 50 Ork Pop以上、Orky Fort建造済み、'Eavy Boy Armour研究済み 効果 体力がさらに33%向上 他のユニットへの効果 Slugga Boy、Shoota Boy、Tankbustaz、Nobの体力がさらに33%向上 More Dakka 研究コスト 60 20 研究時間 60秒 研究場所 Pile O Gunz! 研究に必要な条件 16 Ork Pop以上 効果 Slugga(初期射撃装備)の攻撃力が15%向上 他のユニットへの効果 Slugga Boy、Shoota Boy、Nob Leader、Flash Gitz、Waaagh! BannerとDa Listenin Post以外の建設物の射撃攻撃力が15%向上 Even More Dakka 研究コスト 80 40 研究時間 60秒 研究場所 Pile O Gunz! 研究に必要な条件 46 Ork Pop以上、Orky Fort建造済み、More Dakka研究済み 効果 Slugga(射撃用標準装備)の攻撃力がさらに20%向上 他のユニットへの効果 Slugga Boy、Shoota Boy、Nob Leader、Waaagh! BannerとDa Listenin' Post以外の建設物の射撃攻撃力がさらに20%向上Flash Gitzの射撃攻撃力がさらに15%向上Wartrukkの射撃攻撃力が15%向上 概要 Stormboyz Squadはジャンプ能力を持つ近接歩兵である。Waaagh! Bannerを二個建設することで生産可能になる。ジャンプ歩兵の常としてコマンダーを所属させることができず、輸送車に乗ることもできない。 Stormboyは機動力に優れているが、近接戦闘ユニットとしては非力すぎる嫌いがある。特に、体力が低すぎるために粘りが利かず、ジャンプで飛び込んで敵の射撃歩兵を擾乱するという強襲歩兵の重要な役割にあまり向いていない。 (体力の比較…Stormboy 275 Raptor 405 Assault Marine 465 Hawling Banshee 385 Kroot Carnivore(初期状態) 310 FLayed One 700) 攻撃力も低めである。射撃がまったく使えないのは他の近接歩兵と同じ。 こういった欠点をカバーするには数をそろえるしかないが、数をそろえるにはWaaagh! Bannerを建てねばならず、十分な数のWaaagh! Bannerが建てられるなら真打であるNob Squadの登場もそれほど先ではない。このため、Stormboyz Squadは主役になりにくい。 Orkの歩兵の常として研究によって大きくパワーアップできるが、そこまでしてStormboyz Squadを使うことは余りない。Stormboyz Squadがパワーアップしていれば、Nob Squadはそれ以上にパワーアップしている。 専用の研究であるStormboy Speed Boost Researchは意外と効果的なこともある(逃げる敵に追いすがって攻撃できる)。ただしこの研究をした後はStormboy Nob Leaderを生産しないこと(なぜか研究の効果がNob Leaderに及ばないため、Nob Leaderがいると移動速度30%上昇の効果が出なくなる。アビリティはちゃんとした効果が出る)。
https://w.atwiki.jp/mekameka/pages/3015.html
MotorStorm 3 / モーターストーム3 【MotorStorm:Apocalypse】 メーカー SCE EU発売日 2011年3月16日 JP延期 対応機種 PS3 MotorStormシリーズの一つ 大地震で崩壊した都市を舞台におこなわれる過酷なサバイバルレース 関連 MotorStorm 2 MotorStorm 2 MotorStormシリーズ ま行 プレイステーション3 PR モーターストーム3 (発売日未定)
https://w.atwiki.jp/jamproject/pages/77.html
STORM 「熱き怒りの嵐を抱いて戦うために飛び出せゲッター!」 概要 2000年12月21日に発売されたシングルに収録されている曲。読み方は「ストーム」。 OVA「真ゲッターロボ対ネオゲッターロボ」のOP。 作詞 工藤哲雄 作曲 千沢仁 編曲 須藤賢一 歌っているのは影山と水木の二人だが、名義上はJAM Project feat.水木一郎&影山ヒロノブ。 Live 関連ページ 曲別データベース SINGLE ALBUM コメント 名前 コメント
https://w.atwiki.jp/psn_newgame/pages/169.html
ゲーム名 RAYSTORM HD (→ソフトカタログへ) 対応フォーマット PS3 CERO A ジャンル アーケードシューター プレイヤー人数 オフライン 1-2人 販売価格等 1,500円 容量 368MB 配信開始日 2010/05/06 体験版 無し 備考/PSN等 トロフィー, オンラインランキング対応 対応周辺機器 振動機能対応 映像出力 NTSC, 480p, 720p 音声出力 Linear PCM 2ch 販売元 スクウェア・エニックス 開発元 TAITO, PROKION まとめサイト 関連スレor板 シューティングゲームレイシリーズ総合スレ MAP 12
https://w.atwiki.jp/touhoumusic/pages/19.html
※発売順です(上が新作) 詳細情報(原曲、歌詞や関連動画など)はリンク先へ Trois Noir Showdown For Lovers not Fighters Flight on tears 光の都 Underground Bridge Nuclear Fusion Last Remote Bad Apple!! (REDALiCE Remix) Gallardo For Lovers not Fighters (Tsukasa Remix) Signature Selene s light Pinky Girls Story Break the Sabbath Flowering Night necro fantasia (progressiv remix) Septet pour une infante defunte The Flower Like the Fantasy Ultimate Truth Voyage 1969 Noche de Alacranes Retrospective Kyoto Maple Dream... 1884 Fate Of Sixty Years Moonlives For Your Pieces Strawberry Crisis!! Invisible Full Moon Cloudy Baby Necro Fantasia For Your Pieces Subterranean Animism. Astro Toilet Shinto Shrine (Ryo Ohnuki Remix) Alice Maestera (Ryo Ohnuki Remix) Necro Fantasia (REDALiCE Remix) Exserens - A selection of Alstroemeria Records Bad Apple!! Dark Road Crystallize Silver Dreaming Eighteen Four Dolls Shinto Shrine Shanhai Alice in 1884 Voile, the Magic Library Scolded By The Princess Alice Maestera The Last Judgement Outro DANCEFLOOR COMBAT Intro Bad Apple!! feat.nomico(Simian Noize Remix) Graphical Scenery Nitro (SDB Remix) Grave Of Being (Airflow Remix) Ke special, but not special Particles Volar Crisis/W (pdc.B.less mix) Harmony Cheek Colours Dark Road Alice Maestera Voile, the Magic Library Wind s Believer Harmony Interlude Maple Wizen (2007AW Re-Mastered) Suwa Foughten Field Circuit Breakers Intro Dreaming feat.nomico (Live) Maple Wizen feat.nomico (Live) Bad Apple feat.nomico (Live) Lovelight (Live) Eighteen Four feat.Misato (Spray Remix) (Live) Dolls (instrumental) Dreaming (instrumental) Shinto Shrine (instrumental) Eighteen Four (instrumental) Scolded By The Princess (instrumental) Infinite Being (instrumental)
https://w.atwiki.jp/fujiyan/pages/57.html
WebコミックLibraryhttp //web-comi.appspot.com/GAE/JとSlim3で作成してみた、各出版社から配信されているWebコミックをまとめて閲覧できるサイトです。只今、実験運用中… 概要 Datastoreの主要なQuotaである「Datastore Read Operations」と「Datastore Small Operations」を節約するために、どのようにMemcacheを活用すればよいか、についての考察です。 月並みな話から まずは、キャッシュの計画については「これが正解だ」というのはありません それがあれば、既にフレームワークとして提供されています… ということで、対象となるWebアプリケーションの特性に応じた、「最適解」としてのキャッシュの計画を考える必要があります。 アクセスされるデータの偏り方 データの更新頻度 更新結果を反映させるまでの猶予がどれだけあるか(リアルタイム性) などなど 例えば、現在ひっそりと実験運用中のWebコミックLibraryhttp //web-comi.appspot.com/に関しては データの更新頻度については、原則、一日数回のクローリングでのみ更新なので、クローリング直後の内容をキャッシュしておけば、毎回Datastoreにアクセスする必要が無い クエリ結果も、「サイトの作品全部」や「作品の作者全員」等、決まりきった検索条件ばかりなので、これもどんどんキャッシュしておけば良い クエリ結果のキャッシュは、(クローリングによる更新も含めて)何らかのModelの更新があった時点で、全てクリアでもいいや そこまでリアルタイム性が要求されるデータでは無いので、万が一、キャッシュの内容が古かったとしても、次のクローリングのタイミングで最新化されれば良い。 といった感じです。 前提 計画にあたり、Google App Engine側での、いくつかの前提を確認しておきましょう。 Eventual Consistency(結果整合性) 参考 najeira Eventual consistencyなクエリ結果のキャッシュ 結果整合性(Eventual Consistency)についての分かりやすいプレゼン資料 - Publickey デフォルトのHigh Replication Datastoreでは「Eventual Consistency」が採用されています。 これは、「更新された内容は、そのうち全ノードに反映される」→「更新直後のクエリでは、直前の更新内容が取得されない可能性がある」ということです。 まぁ、全ノード反映の時間はかなり早いので、「単一のリクエスト処理内で、更新直後にクエリ発行」ぐらいでしか問題にならないかと思います。 とは言え、そのような「更新前の情報によるクエリ結果」が返ってきた場合に、それをキャッシュしてしまうと、キャッシュにヒットする間は古いクエリ結果のまま、ということが発生してしまいます。 上記により「Eventual Consistencyのためにキャッシュが当てにならない」という声もありますが 仮に古い結果でキャッシュされたとしても、いつまでにキャッシュがご破算になって再取得が発生すれば、実運用上問題ないか? を検討して、キャッシュのクリアがそこまでに発生するのが判明すれば、Eventual Consistencyとキャッシュは共存可能です。 「WebコミックLibrary」の例で言えば、「更新が発生したクローリング直後のクエリは古い結果になるかも知れないけど、急ぎのデータでもないし、次のクローリングの際にキャッシュがご破算になるから、その後のクエリで最新化できればいいや」という考えです。 むしろ「そのうちキャッシュがご破算になって、正しい内容で最新化される」までを含めて、Eventual Consistencyであると解釈しましょう。 ということで、クエリ結果のキャッシュについては、この特性を前提にして いつ、クエリ結果をキャッシュすべきか いつ、キャッシュをクリアすべきか を考える必要があります。 Datastore Read OperationsとDatastore Small Operationsのコスト比較 参考 Billing and Budgeting Resources - Google App Engine — Google Developers 「Datastore Read Operations」「Datastore Small Operations」の計算方法は下記の通りです。 Datastore Read Operations「Datastore Entity Fetch Ops」+「Datastore Query Ops」 Datastore Small Operations「Datastore Key Fetch Ops」+「Datastore Id Allocation Ops」 注目は「Datastore Entity Fetch Ops」と「Datastore Key Fetch Ops」ですが、同じクエリでも Query#setKeysOnly()を指定しない場合は、結果件数が「Datastore Entity Fetch Ops」にカウント。Slim3の場合は、ModelQuery#asList()/asIterator()を用いた場合 Query#setKeysOnly()を指定した場合は、結果件数が「Datastore Key Fetch Ops」にカウント。Slim3の場合は、ModelQuery#asKeyList()/asKeyIterator()を用いた場合 という計算になります。 これは、filterでEntity(Slim3ならModel)のプロパティを検索キーにしても同様です。 さて、参考ページに記載されているコストをみると Operation Cost Read 10万回につき、$0.07 Small 10万回につき、$0.01 と、Readに比べてSmallは7分の1のコストになっています。 これらの内容から考察すると、「Keyに紐づくEntityが全てキャッシュされており、KeyさえあればEntityの取得でDatastoreにアクセスする必要が無い」という前提条件があれば、 クエリはQuery#setKeysOnly()を指定してKeyのみを取得したほうが、同じ件数でも低コスト ということになります。 もちろん、Entityが必ずしもキャッシュされているとは限らないので、もしキャッシュに存在しない場合はEntityをDatastoreから取得するためにDatastore Entity Fetch Opsが追加で発生します。 よって、その場合はSmallとRead両方にカウントされてしまいます。 まぁ、キャッシュなので、ミスしたときのペナルティはそれなりに発生してしまうもんです…。 ということで、 キャッシュされる率が高いEntityについては、クエリ結果はQuery#setKeysOnly()を指定してKeyのみ取得し、実際のEntityはキャッシュから取得することで、コストを削減する という方針は有効です。 なお「無料枠内なんでコスト関係ないっす」という方についても、Query#setKeysOnly()をまったく指定しなければ全てのクエリ結果がReadのカウントとなってしまいますが、上記の方針ならばReadとSmallに分散されて過度なReadの増加が抑えられるので、やっぱり有効です。 ここから先の議論は、最初にお話した通り、全てのWebアプリケーションに適用できるわけではありません。 が、概ねのモノには当てはまるかと思います。後は、各アプリケーションに応じてカスタムするのが良いかと。 どこで実装するか 実際のデータ参照先がDatastoreなのかキャッシュなのか、については、データを利用する側からは意識したくないので、通常はDAO層で実装します。 キャッシュ対象の分類 キャッシュ対象は、主に「Entity」「クエリ結果」の2つになります。 Entity(Slim3ならModel)「Datastore Entity Fetch Ops」の節約 クエリ結果クエリ結果のKeyのListをキャッシュします。 「Datastore Query Ops」と、(Query#setKeysOnly()を指定する場合は)「Datastore Key Fetch Ops」の節約 以下、それぞれについて、どのような方針でキャッシュするかを検討します。 なお、実装はSlim3を例としますが、考え方はそれ以外でも変わらないかと。 Entityのキャッシュ Memcacheのキーとしては、DatastoreのKeyそのものを用います。 キャッシュの更新方針は、あまり深く考えずに、 Entityの登録/更新/削除と同時に、キャッシュにも登録/更新/削除 取得時に、最初にキャッシュを参照し、なければDatastoreから取得して、キャッシュに登録 で良いかと。 Daoクラスの拡張 Slim3の場合、通常はDaoBaseをexntedsして、各Modelの具象Daoを定義しますが、 その間にキャッシュをサポートするDao階層を挟みます。 public abstract class CachingDao M extends DaoBase M { @Override public M get(final Key key) { M model = Memcache.get(key); if (model == null) { if (!Memcache.contains(key)) { // キャッシュミス時 model = super.get(key); Memcache.put(key, model); } } return model; } @Override public Key put(M model) { Key key = super.put(model); Memcache.put(key, model); return key; } @Override public void delete(Key key) { super.delete(key); Memcache.delete(key); } } 各Modelの具象クラスは、上記CachingDaoをextendsするようにします。 ModelRefへのアクセスのキャッシング Slim3では、Modelのプロパティの1つとして、他のModelへの参照を表すModelRefクラスがあります。 ModelRefを使った参照では、間接的にDatastoreへのアクセスが発生するので、これもキャッシングの対象とします。 ※以前は、setxxxModelでキャッシュに登録していましたが、これをするとDatastoreと同期がとれなくなるので、止めました @Model(schemaVersion = 1) public class FooModel implements Serializable { .... private ModelRef BarModel barModelRef = new ModelRef BarModel (BarModel.class); public BarModel getBarModel() { Key key = barModelRef.getKey(); if (key == null) { // keyがnullなら、キャッシュ/Datastoreにはアクセスしない return barModelRef.getModel(); } M model = Memcache.get(key); if (model == null) { if (!Memcache.contains(key)) { // キャッシュミス時 model= barModelRef.getModel(); Memcache.put(key, model); } } return model; } .... } 大抵の場合、上記の対応だけでも、かなりDatastoreへのアクセスが減ります。 ※WebコミックLibraryの場合、コレだけでキャッシュヒット率が94%です。つまり、殆どキャッシュです。 クエリ結果のキャッシュ Memcacheのキーとしては、クエリの種類や検索条件を表す文字列を用います。 例えば、「クエリを実行したDAOクラス名+メソッド名+検索キー」等 これは、キャッシュ更新方針が難しい(Entityが更新された場合、キャッシュされたクエリ結果をどうするか等)ので、アプリケーション毎に最適な方針を検討します。 (後日追記予定)